//
// Created by 39442 on 2025/10/4.
//

#include "Result.h"
#include "Task.h"

Result::Result(std::shared_ptr<Task> task, bool isValid)
    :task_(task), isValid_(isValid)
{
    task->setResult(this);
}

void Result::setVal(Any any)
{
    this->any_ = std::move(any);
    sem_.post();	//已经获取了任务的返回值，增加信号量资源
}

Any Result::get()	//用户调用
{
    if (!isValid_)
    {
        return Any("");
    }

    sem_.wait();	//task任务如果没有执行完，这里会阻塞用户的线程
    return std::move(any_);
}